﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Osiptel.HECO.BE;
using System.Data.OracleClient;
using System.Data;

namespace Osiptel.HECO.DL
{
    public class GrupoDL
    {
        
        public int mInsertar(GrupoBE grupo)
        {
            
            try
            {
                Int32 id = 0;

                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_HECO_GLOBAL.SP_INSERTAR_GRUPO";
                    cmd.CommandType = CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("PNOMBRE", OracleType.VarChar);
                    OracleParameter prm2 = new OracleParameter("PDESCRIPCION", OracleType.VarChar);
                    OracleParameter prm3 = new OracleParameter("PCODIGO", OracleType.Char);
                    OracleParameter prm4 = new OracleParameter("PP05TIPO", OracleType.Int32);
                    OracleParameter prm5 = new OracleParameter("PP06SUBTIPO", OracleType.Int32);
                    OracleParameter prm6 = new OracleParameter("PUSUCRE", OracleType.VarChar);
                    OracleParameter prm7 = new OracleParameter("PIDGRUPO", OracleType.Int32);

                    prm1.Direction = ParameterDirection.Input;
                    prm2.Direction = ParameterDirection.Input;
                    prm3.Direction = ParameterDirection.Input;
                    prm4.Direction = ParameterDirection.Input;
                    prm5.Direction = ParameterDirection.Input;
                    prm6.Direction = ParameterDirection.Input;
                    prm7.Direction = ParameterDirection.Output;

                    prm1.Value = grupo.Nombre;
                    prm2.Value = grupo.Descripcion;
                    prm3.Value = grupo.Codigo;
                    prm4.Value = grupo.P05Tipo;
                    prm5.Value = grupo.P06SubTipo;
                    prm6.Value = grupo.UsuCre;
                    prm7.Value = grupo.IdGrupo;

                    cmd.Parameters.Add(prm1);
                    cmd.Parameters.Add(prm2);
                    cmd.Parameters.Add(prm3);
                    cmd.Parameters.Add(prm4);
                    cmd.Parameters.Add(prm5);
                    cmd.Parameters.Add(prm6);
                    cmd.Parameters.Add(prm7);

                    using (DL_CONEXION NewConexion = new DL_CONEXION())
                    {
                        int ret = NewConexion.ejecutaSQL(cmd);
                        id = Convert.ToInt32(Convert.ToString(cmd.Parameters["PIDGRUPO"].Value));
                        return id;
                    }                    
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        public List<GrupoBE> Obtener(int pIDProyecto)
        {
            try
            {
                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_HECO_GLOBAL.SP_OBTENER_GRUPO";
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("pIdProyecto", OracleType.Number);
                    OracleParameter prm2 = new OracleParameter("oListado", OracleType.Cursor);
                    prm1.Direction = ParameterDirection.Input;
                    prm2.Direction = ParameterDirection.Output;
                    prm1.Value = pIDProyecto;
                    cmd.Parameters.Add(prm1);
                    cmd.Parameters.Add(prm2);

                    using (DL_CONEXION NewDL_CONEXION = new DL_CONEXION())
                    {
                        try
                        {
                            NewDL_CONEXION.retOpen();
                            cmd.Connection = NewDL_CONEXION.retConexion();

                            GrupoBE objGrupoBE;
                            List<GrupoBE> llstGrupoBE = new List<GrupoBE>();
                            using (OracleDataReader objDRConsulta = cmd.ExecuteReader())
                            {
                                while (objDRConsulta.Read())
                                {
                                    //objConsultaBE.IdGrupo = Convert.ToInt32(oRead.GetValue(oRead.GetOrdinal("idgrupo")));
                                    //objConsultaBE.Nombre = Convert.ToString(oRead.GetValue(oRead.GetOrdinal("nombre")));
                                    //objConsultaBE.Descripcion = Convert.ToString(oRead.GetValue(oRead.GetOrdinal("descripcion")));
                                    //objConsultaBE.Codigo = Convert.ToString(oRead.GetValue(oRead.GetOrdinal("codigo")));
                                    //objConsultaBE.P05Tipo = Convert.ToInt32(oRead.GetValue(oRead.GetOrdinal("p05tipo")));
                                    //objConsultaBE.P06Subtipo = Convert.ToInt32(oRead.GetValue(oRead.GetOrdinal("p06subtipo")));
                                    //objConsultaBE.AdFechaReg = Convert.ToDateTime(oRead.GetValue(oRead.GetOrdinal("adfechareg")));
                                    //objConsultaBE.AdFechaModif = Convert.ToDateTime(oRead.GetValue(oRead.GetOrdinal("adfechamodif")));
                                    //objConsultaBE.AdUsuarioReg = Convert.ToInt32(oRead.GetValue(oRead.GetOrdinal("adusuarioreg")));
                                    //objConsultaBE.AdUsuarioModif = Convert.ToInt32(oRead.GetValue(oRead.GetOrdinal("adusuariomodif")));
                                    //objConsultaBE.AdIpReg = Convert.ToString(oRead.GetValue(oRead.GetOrdinal("adipreg")));
                                    //objConsultaBE.AdIpModif = Convert.ToString(oRead.GetValue(oRead.GetOrdinal("adipmodif")));
                                    objGrupoBE = new GrupoBE();
                                    objGrupoBE.IdGrupo = Convert.ToInt32(objDRConsulta["IDGRUPO"]);
                                    objGrupoBE.Nombre = Convert.ToString(objDRConsulta["NOMBRE"]);
                                    objGrupoBE.P05Tipo = Convert.ToInt32(objDRConsulta["P05TIPO"]);
                                    objGrupoBE.P05TipoDesc = Convert.ToString(objDRConsulta["P05TIPODESC"]);
                                    objGrupoBE.P06SubTipo = Convert.ToInt32(objDRConsulta["P06SUBTIPO"]);
                                    objGrupoBE.P06SubTipoDesc = Convert.ToString(objDRConsulta["P06SUBTIPODESC"]);
                                    objGrupoBE.Descripcion = Convert.ToString(objDRConsulta["DESCRIPCION"]);

                                    objGrupoBE.UsuCre = Convert.ToString(objDRConsulta["USUCRE"]);                                    
                                    objGrupoBE.FecCre = Convert.ToDateTime(objDRConsulta["FECCRE"]);
                                    objGrupoBE.UsuMod = Convert.ToString(objDRConsulta["USUMOD"]);                                    
                                    objGrupoBE.FecMod = Convert.ToDateTime(objDRConsulta["FECMOD"]);

                                    llstGrupoBE.Add(objGrupoBE);
                                }
                                objDRConsulta.Close();
                            }
                            NewDL_CONEXION.retClose();
                            return llstGrupoBE;
                        }
                        catch (Exception ex)
                        {
                            throw ex;
                        }

                        finally
                        {
                            if (NewDL_CONEXION.conexion.State == ConnectionState.Open) NewDL_CONEXION.retClose();

                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void mEliminar(GrupoBE gBorrar)
        {
            try
            {

                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_HECO_GLOBAL.SP_ELIMINAR_GRUPO";
                    cmd.CommandType = CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("PIDGRUPO", OracleType.Int32);
                    OracleParameter prm2 = new OracleParameter("PUSUARIOMOD", OracleType.VarChar);
                    OracleParameter prm3 = new OracleParameter("PIPMOD", OracleType.VarChar);

                    prm1.Direction = ParameterDirection.Input;
                    prm1.Value = gBorrar.IdGrupo;
                    prm2.Direction = ParameterDirection.Input;
                    prm2.Value = gBorrar.UsuMod;
                    prm3.Direction = ParameterDirection.Input;
                    prm3.Value = gBorrar.IpMod;
                    cmd.Parameters.Add(prm1);
                    cmd.Parameters.Add(prm2);
                    cmd.Parameters.Add(prm3);

                    using (DL_CONEXION NewConexion = new DL_CONEXION())
                    {
                        int ret = NewConexion.ejecutaSQL(cmd);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
